The present invention relates to code generation, and in particular, systems and methods for automatically modifying code generation templates in a code generation software system.
Historically, computer software programs for controlling the operation of computers were created and developed by computer programmers writing the code that defined the operations to be performed. For example, typically, computer programmers would write code in such languages as FORTRAN, PASCAL, C, C++, Java, and many other languages. The code would then be compiled to generate machine language instructions (i.e., zeros and ones) for execution on the computer system's hardware. However, developing code by hand is a very time consuming and labor intensive process, in some cases requiring hundreds or even thousands of programmer hours to implement a complex software system.
Recently, the concept of code generation has attracted increasing attention. For example, rather than writing computer programming code line by line, code generation paradigms posit that a software developer specify the desired operational behavior of the software, and a functional specification may be used to automatically generate code in any desired language or for any desired platform. However, the promise of automatic code generation has not been completely fulfilled because of inherent difficulties in implementing such systems.
The paradigm of Model-Driven Software Development motivates the lifting of fine-grained code structures and development to coarser-grained models and higher levels of designing. This abstraction process approximates the developer's mental model of the underlying implementation and, hence, reduces the necessary effort in production of such software. Based on readily developed system architecture models, appropriate code generators produce executable runtime code.
For example, one approach to automatic code generation is referred to as Model-Driven Software Development (“MDSD” or “MDD”). FIG. 1 illustrates a typical MDSD architecture. The example MDSD software includes a model 101, template 102, and code generator 103 that generates code 104. A model 101 describes the structure and behavior of a software system. This description may be a high level description of states, entities, transitions, and a variety of other factors for describing the software. For example, a model may include a declarative description of data structures to be generated or a description of a user interface. The model may be an instance of a meta model for describing a system at a higher level of abstraction (i.e., more generally). The model may be specified using a modeling language, for example. A modeling language is any artificial language that can be used to express information or knowledge or systems in a structure that is defined by a consistent set of rules. The rules are used for interpretation of the meaning of elements in the structure. Modeling languages can be used to specify system requirements, structures, and behaviors. Modeling languages are intended to be used to precisely specify systems so that stakeholders (e.g., customers, operators, analysts, designers) can better understand the system being modeled. Example modeling technologies are Eclipse Modeling Framework (“EMF”), whose language to create metamodels is called “Ecore” (the metametamodel), and the MetaObject Facility (“MOF”) from the Object Management Group with the metametamodel also called “MOF” or a smaller version “EMOF” (essential MOF).
Templates 102 are used to generate code based on a model in the context of a meta-model. Templates control output code generation. For example, a template may be used to access the model, execute logic, and perform various other tasks. A template may retrieve data structures defined in a model to generate code. The template may be a text file that is interpreted by the code generator 103 (e.g., at runtime of the code generator) to generate code 104. Templates may include one or more import statements, one or more extension statements, and one or more define blocks (i.e., definitions) and may be written in template languages such as XPAND and MOFScript, for example.
Developing templates for code generators is a time-consuming and error-prone process. Even if developers are able to create appropriate templates, template maintenance remains challenging. Potentially very complex generator templates may need to be adapted if new requirements arise. In this case, it is essential that no new errors are introduced and already developed assets must remain operational as they were before modification.
Thus, it would be desirable to simplify template modification in a code generation system. The present invention solves these and other problems by providing systems and methods for automatically modifying code generation templates in a code generation software system.